package main

import (
	"fmt"
	"os"
)

/*
### 2. 学生信息管理系统  id 、name、age、address  （id不能重复）

1、添加学生信息
2、修改学生信息
3、删除学生信息
4、查看当前所有学生信息
5、退出
*/
type Management struct {
	allstudent map[int] Student_List
}


type Student_List struct {
	name    string
	address string
	id      int
	age     int
}

func (m Management) Add_Student(){
	var id int
	var name string
	var age int
	var address string
	fmt.Println("请输入学生学号:")
	fmt.Scanln(&id)
	fmt.Println("请输入学生姓名:")
	fmt.Scanln(&name)
	fmt.Println("请输入学生年龄:")
	fmt.Scanln(&age)
	fmt.Println("请输入学生家庭地址:")
	fmt.Scanln(&address)
	stduent := Student_List{name, address, id, age}
	m.allstudent[id] = stduent
}


func (m Management) Modify_Student(){

	var modify_id int
	fmt.Print("请输入要编辑的学生序号:")
	fmt.Scanln(&modify_id)

	// 先去map中查看有没有这个学生,如果没有打印查无此人的提示
	stuObj, ok := m.allstudent[modify_id]
	if !ok {
		fmt.Println("查无此人")
		return
	}
	fmt.Printf("你要修改的学生信息如下:学号:%d 姓名:%s, 年龄:%d, 地址:%s\n", stuObj.id, stuObj.name, stuObj.age, stuObj.address)

	var name string
	var age int
	var address string
	fmt.Println("请输入学生姓名:")
	fmt.Scanln(&name)
	fmt.Println("请输入学生年龄:")
	fmt.Scanln(&age)
	fmt.Println("请输入学生家庭地址:")
	fmt.Scanln(&address)
	stuObj.name = name
	stuObj.age = age
	stuObj.address = address
	m.allstudent[modify_id] = stuObj
	fmt.Printf("修改成功,修改后的学生信息如下:学号:%d 姓名:%s, 年龄:%d, 地址:%s\n", stuObj.id, stuObj.name, stuObj.age, stuObj.address)

}

func (m Management) Delete_Student() {

	var deleteID int
	fmt.Print("请输入要删除的学生序号:")
	fmt.Scanln(&deleteID)

	// 先去map中查看有没有这个学生,如果没有打印查无此人的提示
	stuObj, ok := m.allstudent[deleteID]
	if !ok {
		fmt.Println("查无此人")
		return
	}
	delete(m.allstudent, deleteID)
	fmt.Printf("修改成功,修改后的学生信息如下:学号:%d 姓名:%s, 年龄:%d, 地址:%s\n", stuObj.id, stuObj.name, stuObj.age, stuObj.address)
}

func (m Management) Show_AllStudent() {
	for _, stuObj := range m.allstudent {
		fmt.Printf("你要修改的学生信息如下:学号:%d 姓名:%s, 年龄:%d, 地址:%s\n", stuObj.id, stuObj.name, stuObj.age, stuObj.address)
	}
}

func ShowMenu() {
	fmt.Println("欢迎光临学生管理系统")
	fmt.Println(`
		1、添加学生信息
		2、修改学生信息
		3、删除学生信息
		4、查看当前所有学生信息
		5、退出
	`)
}



func main() {
	var student_list = Management{
		allstudent: make(map[int]Student_List, 100),
	}

	for {
		ShowMenu()
		fmt.Print("请输入要执行的操作:")

		var choice int
		fmt.Scanln(&choice)

		switch choice {
		case 1:
			student_list.Add_Student()
		case 2:
			student_list.Modify_Student()
		case 3:
			student_list.Delete_Student()
		case 4:
			student_list.Show_AllStudent()
		case 5:
			os.Exit(0)  //Exit 函数可以让当前程序以给出的状态码 code 退出
		default:
			fmt.Println("请输入1~5之间的数字")
		}
	}

}